<!--
  author: tangcheng_cd
  create by: 2018/6/6
  descr: 元数据包表格
-->
<template>
  <div class="meta-data-pkg-grid">
    <!--表格-->
    <el-table
      ref="userGrid"
      @row-click="rowClicked"
      @selection-change="handleSelectionChange"
      empty-text="无数据"
      v-loading="tableLoading"
      height="100%"
      highlight-current-row
      :data="pageData.list">
      <!--列信息-->
      <el-table-column v-if="isShowExpand" type="expand">
        <template slot-scope="props">
          <el-form label-position="left" inline class="form-table-expand">
            <el-form-item
              v-for="eCol in expandColumns"
              v-if="displayExpandColumns.indexOf(eCol.prop) !== -1"
              :key="eCol.prop"
              :label="eCol.label">
              <span>{{ eCol.render ? eCol.render(props.row[eCol.prop]) : props.row[eCol.prop] }}</span>
            </el-form-item>
          </el-form>
        </template>
      </el-table-column>
      <!--选择框-->
      <el-table-column
        v-if="checkbox"
        type="selection">
      </el-table-column>

      <el-table-column
        v-for="col in columns"
        v-if="displayColumns.indexOf(col.prop) !== -1"
        :key="col.prop"
        :prop="col.prop"
        :label="col.label"
        :width="col.width || {}"
        :formatter="col.render">
      </el-table-column>
    </el-table>
    <!--分页-->
    <el-pagination
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
      :current-page="search.pageNo"
      :page-sizes="[5, 10, 15, 20]"
      :page-size="search.pageSize"
      :layout="paginationLayout"
      :total="pageData.total">
    </el-pagination>
  </div>
</template>

<script type="text/ecmascript-6">
  import api from '../../../../api/url'
  import ajax from '../../../../api/ajax/ajax'
  import {formatDate, parseDate} from 'element-ui/packages/date-picker/src/util'
/*
  pkg_meta_id
  table_meta_id
  colume_attr
  busi_desc
  tech_desc
  de_desr_no
  iss_psn_name
  de_rm_no
  def_date
  rvs_date
  te_date
  le_date
  created_by
  created_dt
  updated_by
  updated_dt

  数据包的元数据代码
  物理表的元数据代码
  字段属性
  业务描述
  技术描述
  设计人编码
  发布人编码
  管理员编码
  定义日期
  修改日期
  生效日期
  失效日期
  创建人
  创建日期
  更新人
  更新日期
  */

  export default {
    name: 'meta-data-pkg-table-grid',
    data () {
      return {
        tableLoading: false, // 数据是否加载中
        search: {
          type: Object,
          pageNo: 1, // 当前页号
          pageSize: 10, // 每页显示记录数
          keyword: null // 关键字
        },
        pageData: Object, // 当前表格页数据
        statusItems: { // 状态枚举值
          1: '正常',
          2: '锁定'
        },
        currentRow: null, // 当前行
        selections: [] // 所有的选择
      }
    },
    props: {
      // 选择框
      checkbox: {
        type: Boolean,
        default: false
      },
      // 显示的详情列
      displayColumns: {
        type: Array,
        default () {
          return ['table_meta_id', 'colume_attr', 'busi_desc', 'tech_desc']
        }
      },
      // 表格列
      columns: {
        type: Array,
        default () {
          return [
            {
              prop: 'pkg_meta_id',
              // label: '数据包的元数据代码'
              label: '包元数据代码'
            },
            {
              prop: 'table_meta_id',
              // label: '物理表的元数据代码'
              label: '表元数据代码'
            },
            {
              prop: 'colume_attr',
              label: '字段属性'
            },
            {
              prop: 'busi_desc',
              label: '业务描述'
            },
            {
              prop: 'tech_desc',
              label: '技术描述'
            },
            {
              prop: 'de_desr_no',
              label: '设计人编码'
            },
            {
              prop: 'iss_psn_name',
              label: '发布人编码'
            },
            {
              prop: 'de_rm_no',
              label: '管理员编码'
            },
            {
              prop: 'def_date',
              label: '定义日期'
            },
            {
              prop: 'rvs_date',
              label: '修改日期'
            },
            {
              prop: 'te_date',
              label: '生效日期'
            },
            {
              prop: 'le_date',
              label: '失效日期'
            },
            {
              prop: 'created_by',
              label: '创建人'
            },
            {
              prop: 'created_dt',
              label: '创建日期'
            },
            {
              prop: 'updated_by',
              label: '更新人'
            },
            {
              prop: 'updated_dt',
              label: '更新日期'
            }
          ]
        }
      },
      // 是否显示详情扩展列
      isShowExpand: {
        type: Boolean,
        default: false
      },
      // 显示的扩展列
      displayExpandColumns: {
        type: Array,
        default () {
          return ['busi_desc', 'tech_desc', 'def_date', 'rvs_date',
            'created_by', 'created_dt', 'updated_by', 'updated_dt']
        }
      },
      // 详情扩展列
      expandColumns: {
        type: Array,
        default: () => [{
          prop: 'pkg_meta_id',
          // label: '数据包的元数据代码'
          label: '包元数据代码'
        },
          {
            prop: 'table_meta_id',
            // label: '物理表的元数据代码'
            label: '表元数据代码'
          },
          {
            prop: 'colume_attr',
            label: '字段属性'
          },
          {
            prop: 'busi_desc',
            label: '业务描述'
          },
          {
            prop: 'tech_desc',
            label: '技术描述'
          },
          {
            prop: 'de_desr_no',
            label: '设计人编码'
          },
          {
            prop: 'iss_psn_name',
            label: '发布人编码'
          },
          {
            prop: 'de_rm_no',
            label: '管理员编码'
          },
          {
            prop: 'def_date',
            label: '定义日期',
            render: cellData => formatDate(parseDate(cellData, 'yyyyMMdd'))
          },
          {
            prop: 'rvs_date',
            label: '修改日期',
            render: cellData => formatDate(parseDate(cellData, 'yyyyMMdd'))
          },
          {
            prop: 'te_date',
            label: '生效日期',
            render: cellData => formatDate(parseDate(cellData, 'yyyyMMdd'))
          },
          {
            prop: 'le_date',
            label: '失效日期',
            render: cellData => formatDate(parseDate(cellData, 'yyyyMMdd'))
          },
          {
            prop: 'created_by',
            label: '创建人'
          },
          {
            prop: 'created_dt',
            label: '创建日期',
            render: cellData => formatDate(parseDate(cellData, 'yyyyMMdd'))
          },
          {
            prop: 'updated_by',
            label: '更新人'
          },
          {
            prop: 'updated_dt',
            label: '更新日期',
            render: cellData => formatDate(parseDate(cellData, 'yyyyMMdd'))
          }]
      },
      // 分页配置
      paginationLayout: {
        type: String,
        default: () => 'total, sizes, prev, pager, next, jumper'
      }
    },
    methods: {
      formatDate (...arg) {
        return formatDate(...arg)
      },
      // 行单击
      rowClicked (row, el) {
        this.currentRow = row
      },
      // 选择改变
      handleSelectionChange (rows) {
        this.selections = rows
      },
      // 获取所有的选择数据
      getSelections () {
        return this.selections
      },
      // 获取当前选中数据
      getCurrentNode () {
        return this.currentRow
      },
      // 清除选择
      clearSelections () {
        this.currentRow = null
        this.selections = []
      },
      // 页记录数更改
      handleSizeChange (pageSize) {
        this.search.pageNo = 1 // 重置到第一页
        this.search.pageSize = pageSize
        this.getData()
      },
      // 当前页切换
      handleCurrentChange (pageNo) {
        this.search.pageNo = pageNo
        this.getData()
      },
      // 通过左侧栏当前项搜索
      getDataByLeftNode (node) {
        this.search.pkg_meta_id = node.meta_id
        console.info(this.search)
        this.getData()
      },
      // 通过关键字搜索
      getDataByKeyword (keyword) {
        this.search.keyword = keyword
        this.getData()
      },
      // 获取页面数据
      getData () {
        // 数据加载中
        this.tableLoading = true
        ajax.post(api.SELECT_META_DATAPKG_TABLE_LIST_FORPAGE, this.search).then(res => {
          this.pageData = res.data
          // 数据加载完毕
          this.tableLoading = false
        }).catch(e => {
          console.error('获取数据发生错误！')
        })
      }
    },
    created () {
      this.getData()
    }
  }
</script>

<style lang="stylus" rel="stylesheet/stylus">
  .meta-data-pkg-grid
    padding 0px 0px
    height 100%
    background-color #fff
    .el-table
      height 100%
      padding-bottom 36px
      .form-table-expand
        font-size 0
      .form-table-expand label
        width 90px
        color #99a9bf
      .form-table-expand .el-form-item
        margin-right 0
        margin-bottom 0
        width 50%
    .el-pagination
      z-index 5
      height 36px
      background-color #fff
      position absolute
      width 100%
      bottom 0px
      padding-bottom 4px
      border-top solid 1px #f4f4f4
</style>
